package com.gaoxk.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 动态参数解析工具类，通过Spring环境获取配置（无需指定配置文件名）
 */
@Component
public class PatternUtils {

    // 预编译正则表达式（提升匹配效率）
    private static final Pattern DYNAMIC_PARAM_PATTERN = Pattern.compile(".*\\$\\{([0-9a-zA-Z.]+)\\}.*");
    private static final Pattern DYNAMIC_PARAM_EXTRACT_PATTERN = Pattern.compile("\\$\\{([0-9a-zA-Z.]+)\\}");
    private   Logger logger = LoggerFactory.getLogger(PatternUtils.class);
    // 注入Spring环境对象（自动整合所有配置文件）
    private final Environment environment;

    // 构造函数注入（Spring自动装配）
    public PatternUtils(Environment environment) {
        logger.info("注入environment");
        logger.info("类加载器："+SpringContextHolder.class.getClassLoader().toString());
        this.environment = environment;
    }

    /**
     * 判断内容是否包含${key}形式的动态参数
     */
    public boolean isContainsDynamicParameter(String content) {
        if (!StringUtils.hasText(content)) {
            return false;
        }
        return DYNAMIC_PARAM_PATTERN.matcher(content).matches();
    }

    /**
     * 提取内容中所有动态参数（去重并保留顺序）
     */
    public List<String> getKeyListByContent(String content) {
        Set<String> paramSet = new LinkedHashSet<>();
        if (StringUtils.hasText(content)) {
            Matcher matcher = DYNAMIC_PARAM_EXTRACT_PATTERN.matcher(content);
            while (matcher.find()) {
                paramSet.add(matcher.group(1));
            }
        }
        return new ArrayList<>(paramSet);
    }

    /**
     * 获取内容中第一个动态参数
     */
    public String getKeyFirstByContent(String content) {
        if (!StringUtils.hasText(content)) {
            return null;
        }
        Matcher matcher = DYNAMIC_PARAM_EXTRACT_PATTERN.matcher(content);
        return matcher.find() ? matcher.group(1) : null;
    }

    /**
     * 从Spring环境中获取配置值（自动识别所有配置文件）
     */
    public String getValueByKeyFromConfig(String key) {
        if (!StringUtils.hasText(key)) {
            return null;
        }
        // 利用Spring环境获取配置，支持application.yml、多环境配置等
        return environment.getProperty(key);
    }
}